home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / qltk / info.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  163 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. from gi.repository import Gtk, Gdk, Pango
  6. from quodlibet import const
  7. from quodlibet import qltk
  8. from quodlibet.util.dprint import print_w
  9. from quodlibet.qltk.properties import SongProperties
  10. from quodlibet.qltk.information import Information
  11. from quodlibet.qltk.ratingsmenu import RatingsMenuItem
  12. from quodlibet.qltk.x import SeparatorMenuItem
  13. from quodlibet.util import connect_obj, connect_destroy
  14. from quodlibet.parse import XMLFromMarkupPattern
  15. from quodlibet.qltk.textedit import PatternEdit
  16.  
  17. class SongInfo(Gtk.EventBox):
  18.     _pattern = "[span weight='bold' size='large']<title>[/span]<~length| (<~length>)><version|\n[small][b]<version>[/b][/small]><~people|\n%(people)s><album|\n[b]<album>[/b]<discnumber| - %(disc)s><discsubtitle| - [b]<discsubtitle>[/b]><tracknumber| - %(track)s>>" % {
  19.         'people': _('by %s') % '<~people>',
  20.         'disc': _('Disc %s') % '<discnumber>',
  21.         'track': _('Track %s') % '<tracknumber>' }
  22.     __PATTERN_FILENAME = os.path.join(const.USERDIR, 'songinfo')
  23.     
  24.     def __init__(self, library, player):
  25.         super(SongInfo, self).__init__()
  26.         self.set_visible_window(False)
  27.         align = Gtk.Alignment(xscale = 0, xalign = 0, yscale = 0, yalign = 0)
  28.         label = Gtk.Label()
  29.         label.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
  30.         label.set_selectable(True)
  31.         align.add(label)
  32.         label.set_alignment(0, 0)
  33.         self._label = label
  34.         connect_destroy(library, 'changed', self._SongInfo__check_change, player)
  35.         connect_destroy(player, 'song-started', self._SongInfo__check_started)
  36.         connect_obj(label, 'populate-popup', self._SongInfo__menu, player, library)
  37.         self.connect('button-press-event', self._SongInfo__create_menu, player, library)
  38.         
  39.         try:
  40.             self._pattern = file(self._SongInfo__PATTERN_FILENAME).read().rstrip()
  41.         except EnvironmentError:
  42.             pass
  43.  
  44.         self._compiled = XMLFromMarkupPattern(self._pattern)
  45.         align.show_all()
  46.         self.add(align)
  47.  
  48.     
  49.     def __create_menu(self, widget, event, player, library):
  50.         button = event.button
  51.         if button == Gdk.BUTTON_SECONDARY:
  52.             menu = Gtk.Menu()
  53.             menu.attach_to_widget(widget, None)
  54.             self._SongInfo__menu(player, menu, library)
  55.             menu.popup(None, None, None, None, button, event.time)
  56.             return True
  57.  
  58.     
  59.     def __menu(self, player, menu, library):
  60.         
  61.         try:
  62.             PlaylistMenu = PlaylistMenu
  63.             import quodlibet.browsers.playlists.menu
  64.             submenu = PlaylistMenu([
  65.                 player.song], self) if player.song else Gtk.Menu()
  66.         except AttributeError:
  67.             e = None
  68.             print_w("Couldn't create songsmenu (%s)" % e)
  69.  
  70.         b = qltk.MenuItem(_('Play_lists'), Gtk.STOCK_ADD)
  71.         if player.song is not None:
  72.             pass
  73.         b.set_sensitive(player.song.can_add)
  74.         b.set_submenu(submenu)
  75.         b.show_all()
  76.         sep = SeparatorMenuItem()
  77.         menu.prepend(sep)
  78.         sep.show()
  79.         menu.prepend(b)
  80.         sep = SeparatorMenuItem()
  81.         menu.prepend(sep)
  82.         sep.show()
  83.         rating = RatingsMenuItem([
  84.             player.song], library)
  85.         rating.set_sensitive(bool(player.song))
  86.         rating.show()
  87.         menu.prepend(rating)
  88.         item = qltk.MenuItem(_('_Edit Display...'), Gtk.STOCK_EDIT)
  89.         item.show()
  90.         connect_obj(item, 'activate', self._SongInfo__edit, player)
  91.         menu.append(item)
  92.         sep = SeparatorMenuItem()
  93.         menu.append(sep)
  94.         sep.show()
  95.         props = qltk.MenuItem(_('Edit _Tags'), Gtk.STOCK_PROPERTIES)
  96.         
  97.         def song_properties_cb(menu_item):
  98.             window = SongProperties(library, [
  99.                 player.info], self)
  100.             window.show()
  101.  
  102.         props.connect('activate', song_properties_cb)
  103.         props.show()
  104.         props.set_sensitive(bool(player.song))
  105.         menu.append(props)
  106.         info = Gtk.ImageMenuItem(Gtk.STOCK_INFO, use_stock = True)
  107.         
  108.         def information_cb(menu_item):
  109.             window = Information(library, [
  110.                 player.info], self)
  111.             window.show()
  112.  
  113.         info.connect('activate', information_cb)
  114.         info.show()
  115.         menu.append(info)
  116.         info.set_sensitive(bool(player.song))
  117.  
  118.     
  119.     def __edit(self, player):
  120.         editor = PatternEdit(self, SongInfo._pattern)
  121.         editor.text = self._pattern
  122.         connect_obj(editor.apply, 'clicked', self._SongInfo__set, editor, player)
  123.         editor.show()
  124.  
  125.     
  126.     def __set(self, edit, player):
  127.         self._pattern = edit.text.rstrip()
  128.         if self._pattern == SongInfo._pattern:
  129.             
  130.             try:
  131.                 os.unlink(self._SongInfo__PATTERN_FILENAME)
  132.             except OSError:
  133.                 pass
  134.             
  135.  
  136.         pattern_file = file(os.path.join(const.USERDIR, 'songinfo'), 'w')
  137.         pattern_file.write(self._pattern + '\n')
  138.         pattern_file.close()
  139.         self._compiled = XMLFromMarkupPattern(self._pattern)
  140.         self._SongInfo__update_info(player)
  141.  
  142.     
  143.     def __check_change(self, library, songs, player):
  144.         if player.info in songs:
  145.             self._SongInfo__update_info(player)
  146.  
  147.     
  148.     def __check_started(self, player, song):
  149.         self._SongInfo__update_info(player)
  150.  
  151.     
  152.     def __update_info(self, player, last = None):
  153.         if not last:
  154.             pass
  155.         last = { }
  156.         text = "<span size='xx-large'>%s</span>" % _('Not playing') if player.info is None else self._compiled % player.info
  157.         if text not in last:
  158.             self._label.set_markup(text)
  159.             last.clear()
  160.             last[text] = True
  161.  
  162.  
  163.